using System;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using Unity.VisualScripting;
using UnityEngine;

public class Nodes : MonoBehaviour
{
    // 定义一个变量用作节点按钮使用，变量名称为nodeButton,类型是 unityEngine.object
    public UnityEngine.Object nodeButton;
    public int nodeId;

    // 定义一个变量用作节点按钮使用，变量名称为nodeTitle,类型是 TextMeshProUGUI
    public TMPro.TextMeshProUGUI nodeTitle;

    public List<Nodes> children = new List<Nodes>(); // 存储该节点的子节点列表
    public Nodes parent; // 存储该节点的父节点
    public RectTransform rectTransform; // 用于获取和操作节点的RectTransform组件

    private void Awake()
    {
        rectTransform = GetComponent<RectTransform>();
    }

    void Start()
    {
        int textLength = nodeTitle.text.Length;
        int buttonWidth = textLength * 18 + 36;
        Transform nodeTrans = nodeButton.GetComponent<Transform>();
        RectTransform nodeRect = nodeTrans.GetComponent<RectTransform>();
        rectTransform = nodeRect;
        // 对nodeRect.sizeDelta重新赋值
        nodeRect.sizeDelta = new Vector2(buttonWidth, 30);
    }

    // Update is called once per frame
    void Update() { }

    // 鼠标在二维平面坐标系得拖拽方法
    public void OnMouseDrag()
    {
        // 获取鼠标在屏幕上的位置 坐标系
        Vector2 pos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        // transform.position = pos;
        // 当鼠标的位置超出屏幕时，将鼠标位置限制在屏幕内
        // 值越小，活动的范围越小
        pos.x = Mathf.Clamp(pos.x, -8f, 8f);
        pos.y = Mathf.Clamp(pos.y, -4.5f, 4.5f);
        // Debug.Log("pos");
        // Debug.Log(JsonUtility.ToJson(pos));
        // 将鼠标位置赋值给节点的位置
        transform.position = pos;
    }

    internal void initData(NodeVo nodeData)
    {
        nodeTitle.text = nodeData.Title;
        nodeId = nodeData.Id;
    }

    internal void initText(string Title)
    {
        nodeTitle.text = Title;
    }

    // 定义一个点击事件
    public void doubleClick()
    {
        // 获取父节点
        gameObject.GetComponentInParent<game>().addChildNode(transform, nodeId);
    }

    // 拖动结束事件
    public void OnNodesEndDrag()
    {
        Debug.Log("OnNodesEndDrag");
        // 检查是否有重叠
        gameObject.GetComponentInParent<game>().CheckOverlap();
    }
}
